//---------------------------------------------------------------------------- Strict
'use strict'
//---------------------------------------------------------------------------- Package
const _ = require('lodash')
//---------------------------------------------------------------------------- getUser
exports.getUser = function (client, code) {
  return new Promise(function (resolve, reject) {
    client.getUserByCode(code, function (err, result) {

      // 如果出错，则记录错误日志，并返回错误
      if (err) {
        reject(err)
      }

      // 正常返回
      resolve(result)
    })
  })
}
//---------------------------------------------------------------------------- setUser
/**
 * 设置用户信息
 * @param Object user 用户信息对象
 * @param String platform 用户来源平台
 * @param String referer 用户来源路徑
 */
exports.setUser = async function (user, platform, referer) {

  // 取当前时间戳
  let time = _.now().toString().substr(0, 10)

  // 取当前用户信息
  let item = await mysql.query(conf.mysql.user, ['select * from user where openid=?'], [user.openid])

  // 如果用户已存在则更新用户
  if (item[0].length > 0) {
    user.id = item[0][0].id
    await _updateUser(time, user)
  } 
  
  // 如果不存在则添加用户
  else {
    let userId = await _addUser(time, user)
    user.id = userId
  }

  // 记录用户登陆信息
  await _logUser(time, user, platform, referer)
}
//---------------------------------------------------------------------------- _addUser
/**
 * 添加新用户
 * @param Int time 已生成的时间戳
 * @param Object user 用户信息对象
 */
const _addUser = async function (time, user) {
  let sql = ['insert into user (openid, nick, head, visit_count, visit_first, visit_last) values (?,?,?,?,?,?)']
  let arg = [user.openid, user.nickname, user.headimgurl, 1, time, time]
  let item = await mysql.query(conf.mysql.user, sql, arg)
  return item[0].insertId
}
//---------------------------------------------------------------------------- _updateUser
/**
 * 更新用户
 * @param Int time 已生成的时间戳
 * @param Object user 用户信息对象
 */
const _updateUser = async function (time, user) {
  await mysql.query(conf.mysql.user, ['update user set head=?, nick=?, `visit_count`=`visit_count`+1, `visit_last`=? where openid=?'], [user.headimgurl, user.nickname, time, user.openid])
}
//---------------------------------------------------------------------------- _logUser
/**
 * 记录用户登陆
 * @param Int time 已生成的时间戳
 * @param Object user 用户信息对象
 * @param String referer 用户来源路徑
 */
const _logUser = async function (time, user, platform, referer) {
  await mysql.query(conf.mysql.log, ['insert into user_weauth(uid, openid, platform, referer, time) values (?,?,?,?,?)'], [user.id, user.openid, platform, referer, time])
}